package com.xiumu.bean.transform.util;

import cn.hutool.core.util.ReflectUtil;
import com.xiumu.bean.transform.dto.UserDTO;
import com.xiumu.bean.transform.pojo.VblogUser;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @Author xiumu
 * @Date 2020/10/24 16:38
 */
public class BeanTransformUtil {

    /**
     * 给目标对象赋值
     * @param userDTO 目标对象
     * @param fieldName 属性名
     * @param value 值
     */
    private static void setFieldValue(UserDTO userDTO, String fieldName, Object value) {
        //使用Hutool的反射工具类获取set方法
        Method method = ReflectUtil.getMethodByName(userDTO.getClass(),getSetMethodName(fieldName));
        //使用Hutool的反射工具类调用set方法给对象赋值
        ReflectUtil.invoke(userDTO,method,value);
    }

    /**
     * 根据属性名字获取set方法名
     * @param fieldName 属性名
     * @return
     */
    private static String getSetMethodName(String fieldName) {
        char[] field = fieldName.toCharArray();
        //首字母大写
        field[0] -= 32;
        //加上set前缀
        return "set"+String.valueOf(field);
    }


    /**
     * 将VblogUser转化成userDTO
     * @param user
     * @return
     */
    public static UserDTO transformUser(VblogUser user){
        UserDTO userDTO = new UserDTO();
        //获取对象所有的属性
        Field[] fields = ReflectUtil.getFields(UserDTO.class);
        for (Field field : fields) {
            //根据属性名获取属性的值
            Object value = ReflectUtil.getFieldValue(user, field.getName());
            if (value != null){
                //给对象赋值
                setFieldValue(userDTO,field.getName(),value);
            }
        }
        return userDTO;
    }

}
